const app = getApp();

Page({
  data: {
    loading: false,
    name: '',
    idNumber: '',
    frontImageUrl: '', // 身份证正面照片
    backImageUrl: '',  // 身份证背面照片
    faceImageUrl: ''   // 人脸照片
  },

  onLoad: function() {
    wx.setNavigationBarTitle({
      title: '实名认证'
    });
  },

  // 输入姓名
  inputName: function(e) {
    this.setData({
      name: e.detail.value
    });
  },

  // 输入身份证号码
  inputIdNumber: function(e) {
    this.setData({
      idNumber: e.detail.value
    });
  },

  // 上传身份证正面照片
  uploadFrontImage: function() {
    this.chooseImage('frontImageUrl');
  },

  // 上传身份证背面照片
  uploadBackImage: function() {
    this.chooseImage('backImageUrl');
  },

  // 上传人脸照片
  uploadFaceImage: function() {
    this.chooseImage('faceImageUrl');
  },

  // 选择图片公共方法
  chooseImage: function(field) {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['camera', 'album'],
      success: (res) => {
        // tempFilePath可以作为img标签的src属性显示图片
        const tempFilePaths = res.tempFilePaths;
        let data = {};
        data[field] = tempFilePaths[0];
        this.setData(data);
      }
    });
  },

  // 提交实名认证
  submitVerification: function() {
    // 验证表单
    if (!this.validateForm()) {
      return;
    }

    this.setData({ loading: true });

    // 在开发模式下使用模拟上传
    if (app.globalData.devMode) {
      setTimeout(() => {
        app.request({
          url: 'https://api.example.com/user/verify',
          method: 'POST',
          header: {
            'Authorization': `Bearer ${app.globalData.token}`
          },
          data: {
            name: this.data.name,
            idNumber: this.data.idNumber,
            // 在实际环境中，这里应该是已上传到服务器的图片URL
            frontImage: 'front_image_url',
            backImage: 'back_image_url',
            faceImage: 'face_image_url'
          },
          success: (res) => {
            if (res.data && res.data.success) {
              wx.showToast({
                title: '认证成功',
                icon: 'success',
                duration: 2000
              });
              
              // 更新全局认证状态
              app.globalData.isVerified = true;
              
              // 延迟返回
              setTimeout(() => {
                wx.navigateBack();
              }, 2000);
            } else {
              wx.showToast({
                title: '认证失败',
                icon: 'none'
              });
            }
            this.setData({ loading: false });
          },
          fail: () => {
            wx.showToast({
              title: '认证失败，请重试',
              icon: 'none'
            });
            this.setData({ loading: false });
          }
        });
      }, 1500);
    } else {
      // 真实环境中，需要先上传图片到服务器，获取URL后再提交表单
      this.uploadImages(() => {
        app.request({
          url: 'https://api.example.com/user/verify',
          method: 'POST',
          header: {
            'Authorization': `Bearer ${app.globalData.token}`
          },
          data: {
            name: this.data.name,
            idNumber: this.data.idNumber,
            frontImage: this.data.frontImageUrl,
            backImage: this.data.backImageUrl,
            faceImage: this.data.faceImageUrl
          },
          success: (res) => {
            if (res.data && res.data.success) {
              wx.showToast({
                title: '认证成功',
                icon: 'success',
                duration: 2000
              });
              
              // 更新全局认证状态
              app.globalData.isVerified = true;
              
              // 延迟返回
              setTimeout(() => {
                wx.navigateBack();
              }, 2000);
            } else {
              wx.showToast({
                title: '认证失败',
                icon: 'none'
              });
            }
            this.setData({ loading: false });
          },
          fail: () => {
            wx.showToast({
              title: '认证失败，请重试',
              icon: 'none'
            });
            this.setData({ loading: false });
          }
        });
      });
    }
  },

  // 表单验证
  validateForm: function() {
    if (!this.data.name) {
      wx.showToast({
        title: '请输入姓名',
        icon: 'none'
      });
      return false;
    }
    
    if (!this.data.idNumber) {
      wx.showToast({
        title: '请输入身份证号码',
        icon: 'none'
      });
      return false;
    }
    
    // 简单的身份证号码验证
    const idReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    if (!idReg.test(this.data.idNumber)) {
      wx.showToast({
        title: '身份证号码格式不正确',
        icon: 'none'
      });
      return false;
    }
    
    if (!this.data.frontImageUrl) {
      wx.showToast({
        title: '请上传身份证正面照片',
        icon: 'none'
      });
      return false;
    }
    
    if (!this.data.backImageUrl) {
      wx.showToast({
        title: '请上传身份证背面照片',
        icon: 'none'
      });
      return false;
    }
    
    if (!this.data.faceImageUrl) {
      wx.showToast({
        title: '请上传人脸照片',
        icon: 'none'
      });
      return false;
    }
    
    return true;
  },

  // 上传图片到服务器（实际环境）
  uploadImages: function(callback) {
    // 这里是简化的示例，实际项目中应该使用Promise或其他方式处理多文件上传
    let uploadCount = 0;
    let totalUploads = 3;
    
    const uploadImage = (filePath, type) => {
      wx.uploadFile({
        url: 'https://api.example.com/upload',
        filePath: filePath,
        name: 'file',
        formData: {
          'type': type
        },
        success: (res) => {
          uploadCount++;
          const data = JSON.parse(res.data);
          if (data.url) {
            if (type === 'id_front') {
              this.setData({ frontImageUrl: data.url });
            } else if (type === 'id_back') {
              this.setData({ backImageUrl: data.url });
            } else if (type === 'face') {
              this.setData({ faceImageUrl: data.url });
            }
          }
          
          if (uploadCount === totalUploads) {
            callback();
          }
        },
        fail: () => {
          wx.showToast({
            title: '图片上传失败',
            icon: 'none'
          });
          this.setData({ loading: false });
        }
      });
    };
    
    if (this.data.frontImageUrl) {
      uploadImage(this.data.frontImageUrl, 'id_front');
    }
    
    if (this.data.backImageUrl) {
      uploadImage(this.data.backImageUrl, 'id_back');
    }
    
    if (this.data.faceImageUrl) {
      uploadImage(this.data.faceImageUrl, 'face');
    }
  }
}) 